package cn.tedu._05mvcboot02.controller;

import cn.tedu._05mvcboot02.mapper.UserMapper;
import cn.tedu._05mvcboot02.pojo.dto.UserInsertDTO;
import cn.tedu._05mvcboot02.pojo.entity.User;
import cn.tedu._05mvcboot02.pojo.vo.UserListVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

import java.util.Date;
import java.util.List;

/**
 * RestController注解
 * 1.组合注解,等价于 @Controller + @ResponseBody;
 * 2.添加此注解后,所有的控制器方法上不需要再添加 @ResponseBody 注解;
 * 3.简化开发;
 */
@Slf4j
@RestController
@RequestMapping("/v1/users/")
@Api(tags = "01.用户管理模块")
public class UserController {
    //自动装配
    @Autowired
    private UserMapper userMapper;

    /**
     * 1.添加用户功能
     *
     * @param userInsertDTO 客户端传递的数据
     * @return String
     */

    @RequestMapping("insert")
    @ApiOperation(value = "1.注册功能")
    public String insert(UserInsertDTO userInsertDTO) {
        /*
            梳理业务逻辑,确定接口-假如说是注册功能:
            1.获取用户输入的数据;
            2.校验用户输入的数据[暂时不做];
            3.校验用户名是否被占用[SELECT接口];
              3.1 如果被占用,提示用户名被占用;
              3.2 未被占用,插入数据[INSERT接口],返回响应.
         */
        User user = new User();
        //复制属性
        BeanUtils.copyProperties(userInsertDTO, user);
        user.setCreated(new Date());
        //调用接口方法
        userMapper.insertUser(user);

        return "添加成功";
    }

    /**
     * 2.查询用户列表功能
     *
     * @return List<UserListVO>
     */
    @RequestMapping("userList")
    @ApiOperation(value = "2.查询用户列表功能")
    public List<UserListVO> userList() {
        log.debug("------>" + userMapper.selectUserList());
        //System.out.println("------>"+ userMapper.selectUserList());
        return userMapper.selectUserList();
    }

    /**
     * 3.删除指定用户功能
     */
    @RequestMapping("delete")
    @ApiOperation(value = "3.删除指定用户功能")
    @ApiImplicitParam(name = "id", value = "用户编号", required = true, dataType = "int")
    public String delete(Integer id) {
        log.debug("id = " + id);
        userMapper.deleteUser(id);

        return "删除成功";
    }

    /**
     * 4.更新用户功能
     *
     * @param user 实体类
     * @return String
     */
    @RequestMapping("update")
    @ApiOperation(value = "4.更新用户功能")
    public String update(User user) {
        log.debug("user = " + user);
        userMapper.updateUser(user);

        return "修改成功";
    }
}










